package br.com.ufc.quixada.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import br.com.ufc.quixada.entidades.Clientes;
import br.com.ufc.quixada.util.ConnectionFactory;

public class ClientesDAO {

    private Connection con;

    public ClientesDAO() throws ClassNotFoundException {
        con = new ConnectionFactory().getConnection();
    }

    public void destroy() {
        try {
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(ClientesDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void inserirCliente(Clientes cliente) throws SQLException {
        PreparedStatement stmt = null;

        try {
            String sql = "INSERT INTO clientes (nome, cpf, rg, email, senha, telefone, endereco, nascimento, valido, codigovalidacao) VALUES (?,?,?,?,?,?,?,?,?,?)";
            stmt = con.prepareStatement(sql);

            stmt.setString(1, cliente.getNome());
            stmt.setString(2, cliente.getCpf());
            stmt.setString(3, cliente.getRg());
            stmt.setString(4, cliente.getEmail());
            stmt.setString(5, cliente.getSenha());
            stmt.setString(6, cliente.getTelefone());
            stmt.setString(7, cliente.getEndereco());
            stmt.setString(8, cliente.getNascimento());
            stmt.setBoolean(9, cliente.isValido());
            stmt.setString(10, cliente.getCodigovalidacao());


            stmt.execute();


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        }
    }

    public ArrayList<Clientes> listaCliente() throws SQLException {
        ArrayList<Clientes> clientes = new ArrayList<Clientes>();
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM clientes";
            stmt = con.prepareStatement(sql);
            rs = stmt.executeQuery();

            while (rs.next()) {
                String nome = rs.getString("nome");
                String cpf = rs.getString("cpf");
                String rg = rs.getString("rg");
                String email = rs.getString("email");
                String senha = rs.getString("senha");
                String telefone = rs.getString("telefone");
                String endereco = rs.getString("endereco");
                String nascimento = rs.getString("nascimento");
                boolean valido = rs.getBoolean("valido");
                String codigovalidacao = rs.getString("codigovalidacao");

                Clientes cliente = new Clientes();
                cliente.setNome(nome);
                cliente.setCpf(cpf);
                cliente.setRg(rg);
                cliente.setEmail(email);
                cliente.setSenha(senha);
                cliente.setTelefone(telefone);
                cliente.setEndereco(endereco);
                cliente.setNascimento(nascimento);
                cliente.setValido(valido);
                cliente.setCodigovalidacao(codigovalidacao);
                clientes.add(cliente);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }

        return clientes;
    }

    public void AtivarCliente(Clientes cliente) throws SQLException {
        PreparedStatement stmt = null;

        try {
            String sql = "UPDATE clientes SET valido = true WHERE cpf = ?";
            stmt = con.prepareStatement(sql);

            stmt.setString(1, cliente.getCpf());

            stmt.execute();


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        }
    }

    public void deleteCliente(Clientes cliente) throws SQLException {
        PreparedStatement stmt = null;

        try {
            String sql = "DELETE FROM clientes WHERE cpf = ? ";
            stmt = con.prepareStatement(sql);

            stmt.setString(1, cliente.getCpf());

            stmt.execute();


        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
        }
    }

    public Clientes findByCPF(String cpfc) throws SQLException {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        Clientes cliente = new Clientes();

        try {
            String sql = "SELECT * FROM clientes WHERE cpf = ?";
            
            stmt = con.prepareStatement(sql);
            stmt.setString(1, cpfc);
            rs = stmt.executeQuery();

            if (rs.next()) {
                String nome = rs.getString("nome");
                String cpf = rs.getString("cpf");
                String rg = rs.getString("rg");
                String email = rs.getString("email");
                String senha = rs.getString("senha");
                String telefone = rs.getString("telefone");
                String endereco = rs.getString("endereco");
                String nascimento = rs.getString("nascimento");
                boolean valido = rs.getBoolean("valido");
                String codigovalidacao = rs.getString("codigovalidacao");


                cliente.setNome(nome);
                cliente.setCpf(cpf);
                cliente.setRg(rg);
                cliente.setEmail(email);
                cliente.setSenha(senha);
                cliente.setTelefone(telefone);
                cliente.setEndereco(endereco);
                cliente.setNascimento(nascimento);
                cliente.setValido(valido);
                cliente.setCodigovalidacao(codigovalidacao);

            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }


        return cliente;
    }

    public Clientes findByEmail(String emailc) throws SQLException {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        Clientes cliente = new Clientes();

        try {
            String sql = "SELECT * FROM clientes WHERE email = ?";

            stmt = con.prepareStatement(sql);
            stmt.setString(1, emailc);
            rs = stmt.executeQuery();

            if (rs.next()) {
                String nome = rs.getString("nome");
                String cpf = rs.getString("cpf");
                String rg = rs.getString("rg");
                String email = rs.getString("email");
                String senha = rs.getString("senha");
                String telefone = rs.getString("telefone");
                String endereco = rs.getString("endereco");
                String nascimento = rs.getString("nascimento");
                boolean valido = rs.getBoolean("valido");
                String codigovalidacao = rs.getString("codigovalidacao");


                cliente.setNome(nome);
                cliente.setCpf(cpf);
                cliente.setRg(rg);
                cliente.setEmail(email);
                cliente.setSenha(senha);
                cliente.setTelefone(telefone);
                cliente.setEndereco(endereco);
                cliente.setNascimento(nascimento);
                cliente.setValido(valido);
                cliente.setCodigovalidacao(codigovalidacao);

            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (con != null) {
                con.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (rs != null) {
                rs.close();
            }
        }


        return cliente;
    }
}
